package com.jprocms.module.cms.dal.mysql.accesslog;

import com.jpro.framework.mybatis.core.mapper.BaseMapperX;
import com.jprocms.module.cms.dal.dataobject.accesslog.AccessLogDO;
import com.jprocms.module.cms.dal.dataobject.accesspage.AccessPageDO;
import com.jprocms.module.cms.dal.dataobject.accessstatistics.AccessStatisticsDO;
import com.jprocms.module.cms.dal.dataobject.accesstrend.AccessTrendDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.OffsetDateTime;
import java.util.List;

/**
 * 访问日志 Mapper
 *
 * @author jprocms
 */
@Mapper
public interface AccessLogMapper extends BaseMapperX<AccessLogDO> {
    /**
     * 删除指定日期之前的数据
     *
     * @param date 指定的日期
     * @return 被删除的数据条数
     */
    int deleteBeforeDate(@Param("date") OffsetDateTime date);

    /**
     * 根据站点ID删除数据
     *
     * @param siteId 站点ID
     * @return 被删除的数据条数
     */
    int deleteBySiteId(@Param("siteId") Integer siteId);

    /**
     * 统计访客数
     *
     * @param date   在此日期后
     * @param siteId
     * @return 访客数
     */
    int countVisitors(@Param("date") OffsetDateTime date, @Param("siteId") Long siteId);

    /**
     * 根据字段名称统计
     *
     * @param name  统计的字段名称
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessStatisticsDO> statByName(@Param("name") String name,
                                        @Param("begin") OffsetDateTime begin, @Param("end") OffsetDateTime end);

    /**
     * 统计省份
     *
     * @param country 国家
     * @param begin   开始日期
     * @param end     介绍日期
     * @return 统计结果
     */
    List<AccessStatisticsDO> statProvince(@Param("country") String country,
                                          @Param("begin") OffsetDateTime begin, @Param("end") OffsetDateTime end);

    /**
     * 统计受访页面
     *
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessPageDO> statUrl(@Param("begin") OffsetDateTime begin, @Param("end") OffsetDateTime end);

    /**
     * 统计入口页面
     *
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessPageDO> statEntryUrl(@Param("begin") OffsetDateTime begin, @Param("end") OffsetDateTime end);

    /**
     * 统计趋势
     *
     * @param begin 开始日期
     * @param end   介绍日期
     * @return 统计结果
     */
    List<AccessTrendDO> statTrend(@Param("begin") OffsetDateTime begin, @Param("end") OffsetDateTime end);

}
